package com.ruoyi.system.domain;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

/**
 * 任务信息表 task_info
 */

public class TaskInfo extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 任务ID */
    private Long taskId;

    /** 用户ID */
    @Excel(name = "用户ID")
    private Long userId;

    /** 任务标题 */
    @Excel(name = "任务标题")
    private String title;

    /** 任务详情 */
    @Excel(name = "任务详情")
    private String content;

    /** 任务预算 */
    @Excel(name = "任务预算")
    private BigDecimal price;

    /** 任务状态（0待承接 1进行中 2已完成 3已取消） */
    @Excel(name = "任务状态")
    private Integer status;

    /** 分类ID */
    @Excel(name = "分类ID")
    private Integer categoryId;

    /** 截止时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "截止时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date dueTime;

    /** 任务图片URL（多图逗号分隔) */
    @Excel(name = "任务图片")
    private String imageUrls;

    /** 职位名称 */
    @Excel(name = "职位名称")
    private String jobName;

    /** 联系人 */
    @Excel(name = "联系人")
    private String contactName;

    /** 联系电话 */
    @Excel(name = "联系电话")
    private String contactPhone;

    /** 简历接收邮箱 */
    @Excel(name = "简历接收邮箱")
    private String contactEmail;

    /** 学历 */
    @Excel(name = "学历")
    private String education;

    /** 性别 */
    @Excel(name = "性别")
    private String gender;

    /** 年龄 */
    @Excel(name = "年龄")
    private String age;

    /** 城市 */
    @Excel(name = "城市")
    private String city;

    /** 区域 */
    @Excel(name = "区域")
    private String district;

    /** 环境描述 */
    @Excel(name = "环境描述")
    private String envDesc;

    /** 自定义结算方式 */
    @Excel(name = "自定义结算方式")
    private String salaryTypeCustom;

    /** 薪资说明 */
    @Excel(name = "薪资说明")
    private String salaryDesc;

    /** 工作周期 */
    @Excel(name = "工作周期")
    private String workPeriod;

    /** 工作时段 */
    @Excel(name = "工作时段")
    private String workTime;

    /** 工作地点 */
    @Excel(name = "工作地点")
    private String location;

    /** 工作类型（全职/兼职） */
    @Excel(name = "工作类型")
    private String workType;

    /** 薪资类型（日结/周结/月结） */
    @Excel(name = "薪资类型")
    private String salaryType;

    /** 联系方式 */
    @Excel(name = "联系方式")
    private String contact;

    /** 工作福利 */
    @Excel(name = "工作福利")
    private String benefits;

    /** 点赞/关注数量 */
    @Excel(name = "点赞/关注数量")
    private Long likeCount;

    /** 收藏数量 */
    @Excel(name = "收藏数量")
    private Long starCount;

    /** 评论数量 */
    @Excel(name = "评论数量")
    private Long commentCount;

    /** 是否已点赞 */
    @TableField(exist = false)
    private boolean isLiked;

    /** 是否已收藏 */
    @TableField(exist = false)
    private boolean isStarred;

    /** 用户名 */
    @Excel(name = "用户名")
    private String username;

    /** 修改人名称 */
    @Excel(name = "修改人名称")
    private String updateName;

    /** 工作周期类型（long/short） */
    @Excel(name = "工作周期类型")
    private String periodType;

    /** 短期任务开始日期 */
    @Excel(name = "短期任务开始日期")
    private String shortStartDate;
    /** 短期任务结束日期 */
    @Excel(name = "短期任务结束日期")
    private String shortEndDate;

    /**
     * 发布者名称
     */
    @TableField(exist = false)
    private String userName;

    /**
     * 发布者头像
     */
    @TableField(exist = false)
    private String userAvatar;

    /**
     * 职位类别名称
     */
    @TableField(exist = false)
    private String category;

    /** 是否关注发布者 */
    private boolean isFollowing;

    /** 任务类别 */
    @Excel(name = "任务类别")
    private String taskCategory;

    /** 任务的申请人列表（仅当查询者为发布者时有效） */
    private transient List<com.ruoyi.common.core.domain.entity.SysUser> applicants;

    /** 最大报名人数 */
    @Excel(name = "最大报名人数")
    private Integer maxApplyCount;

    /** 薪资单位 */
    @Excel(name = "薪资单位")
    private String salaryUnit;

    /** 发布者头像 */
    private String avatar;
    /** 发布者昵称 */
    private String nickName;

    public Long getTaskId() {
        return taskId;
    }

    public void setTaskId(Long taskId) {
        this.taskId = taskId;
    }

    public Long getUserId() {
        return userId;
    }

    public void setUserId(Long userId) {
        this.userId = userId;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public Integer getCategoryId() {
        return categoryId;
    }

    public void setCategoryId(Integer categoryId) {
        this.categoryId = categoryId;
    }

    public Date getDueTime() {
        return dueTime;
    }

    public void setDueTime(Date dueTime) {
        this.dueTime = dueTime;
    }

    public String getImageUrls() {
        return imageUrls;
    }

    public void setImageUrls(String imageUrls) {
        this.imageUrls = imageUrls;
    }

    public String getJobName() {
        return jobName;
    }

    public void setJobName(String jobName) {
        this.jobName = jobName;
    }

    public String getContactName() {
        return contactName;
    }

    public void setContactName(String contactName) {
        this.contactName = contactName;
    }

    public String getContactPhone() {
        return contactPhone;
    }

    public void setContactPhone(String contactPhone) {
        this.contactPhone = contactPhone;
    }

    public String getContactEmail() {
        return contactEmail;
    }

    public void setContactEmail(String contactEmail) {
        this.contactEmail = contactEmail;
    }

    public String getEducation() {
        return education;
    }

    public void setEducation(String education) {
        this.education = education;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getDistrict() {
        return district;
    }

    public void setDistrict(String district) {
        this.district = district;
    }

    public String getEnvDesc() {
        return envDesc;
    }

    public void setEnvDesc(String envDesc) {
        this.envDesc = envDesc;
    }

    public String getSalaryTypeCustom() {
        return salaryTypeCustom;
    }

    public void setSalaryTypeCustom(String salaryTypeCustom) {
        this.salaryTypeCustom = salaryTypeCustom;
    }

    public String getSalaryDesc() {
        return salaryDesc;
    }

    public void setSalaryDesc(String salaryDesc) {
        this.salaryDesc = salaryDesc;
    }

    public String getWorkPeriod() {
        return workPeriod;
    }

    public void setWorkPeriod(String workPeriod) {
        this.workPeriod = workPeriod;
    }

    public String getWorkTime() {
        return workTime;
    }

    public void setWorkTime(String workTime) {
        this.workTime = workTime;
    }

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }

    public String getWorkType() {
        return workType;
    }

    public void setWorkType(String workType) {
        this.workType = workType;
    }

    public String getSalaryType() {
        return salaryType;
    }

    public void setSalaryType(String salaryType) {
        this.salaryType = salaryType;
    }

    public String getContact() {
        return contact;
    }

    public void setContact(String contact) {
        this.contact = contact;
    }

    public String getBenefits() {
        return benefits;
    }

    public void setBenefits(String benefits) {
        this.benefits = benefits;
    }

    public Long getLikeCount() {
        return likeCount;
    }

    public void setLikeCount(Long likeCount) {
        this.likeCount = likeCount;
    }

    public Long getStarCount() {
        return starCount;
    }

    public void setStarCount(Long starCount) {
        this.starCount = starCount;
    }

    public Long getCommentCount() {
        return commentCount;
    }

    public void setCommentCount(Long commentCount) {
        this.commentCount = commentCount;
    }

    public boolean isLiked() {
        return isLiked;
    }

    public void setLiked(boolean liked) {
        isLiked = liked;
    }

    public boolean isStarred() {
        return isStarred;
    }

    public void setStarred(boolean starred) {
        isStarred = starred;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getUpdateName() {
        return updateName;
    }

    public void setUpdateName(String updateName) {
        this.updateName = updateName;
    }

    public String getPeriodType() {
        return periodType;
    }

    public void setPeriodType(String periodType) {
        this.periodType = periodType;
    }

    public String getShortStartDate() {
        return shortStartDate;
    }

    public void setShortStartDate(String shortStartDate) {
        this.shortStartDate = shortStartDate;
    }

    public String getShortEndDate() {
        return shortEndDate;
    }

    public void setShortEndDate(String shortEndDate) {
        this.shortEndDate = shortEndDate;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserAvatar() {
        return userAvatar;
    }

    public void setUserAvatar(String userAvatar) {
        this.userAvatar = userAvatar;
    }

    public String getCategory() {
        return category;
    }

    public void setCategory(String category) {
        this.category = category;
    }

    public boolean isFollowing() {
        return isFollowing;
    }

    public void setFollowing(boolean following) {
        isFollowing = following;
    }

    public String getTaskCategory() {
        return taskCategory;
    }

    public List<com.ruoyi.common.core.domain.entity.SysUser> getApplicants() {
        return applicants;
    }

    public void setApplicants(List<com.ruoyi.common.core.domain.entity.SysUser> applicants) {
        this.applicants = applicants;
    }

    public Integer getMaxApplyCount() {
        return maxApplyCount;
    }

    public void setMaxApplyCount(Integer maxApplyCount) {
        this.maxApplyCount = maxApplyCount;
    }

    public String getSalaryUnit() {
        return salaryUnit;
    }

    public void setSalaryUnit(String salaryUnit) {
        this.salaryUnit = salaryUnit;
    }

    public String getAvatar() {
        return avatar;
    }

    public void setAvatar(String avatar) {
        this.avatar = avatar;
    }

    public String getNickName() {
        return nickName;
    }

    public void setNickName(String nickName) {
        this.nickName = nickName;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("taskId", getTaskId())
            .append("userId", getUserId())
            .append("content", getContent())
            .append("price", getPrice())
            .append("status", getStatus())
            .append("categoryId", getCategoryId())
            .append("dueTime", getDueTime())
            .append("location", getLocation())
            .append("workType", getWorkType())
            .append("salaryType", getSalaryType())
            .append("contact", getContact())
            .append("benefits", getBenefits())
            .append("likeCount", getLikeCount())
            .append("starCount", getStarCount())
            .append("createBy", getCreateBy())
            .append("createTime", getCreateTime())
            .append("updateBy", getUpdateBy())
            .append("updateTime", getUpdateTime())
            .append("imageUrls", getImageUrls())
            .append("jobName", getJobName())
            .append("contactName", getContactName())
            .append("contactPhone", getContactPhone())
            .append("contactEmail", getContactEmail())
            .append("education", getEducation())
            .append("gender", getGender())
            .append("age", getAge())
            .append("city", getCity())
            .append("district", getDistrict())
            .append("envDesc", getEnvDesc())
            .append("salaryTypeCustom", getSalaryTypeCustom())
            .append("salaryDesc", getSalaryDesc())
            .append("workPeriod", getWorkPeriod())
            .append("workTime", getWorkTime())
            .append("periodType", getPeriodType())
            .append("username", getUsername())
            .append("updateName", getUpdateName())
            .append("shortStartDate", getShortStartDate())
            .append("shortEndDate", getShortEndDate())
            .append("isLiked", isLiked())
            .append("isStarred", isStarred())
            .append("isFollowing", isFollowing())
            .append("taskCategory", getTaskCategory())
            .append("maxApplyCount", getMaxApplyCount())
            .append("salaryUnit", getSalaryUnit())
            .append("avatar", getAvatar())
            .append("nickName", getNickName())
            .toString();
    }
}
